package org.z23.agentwork.service;

import org.springframework.ai.chat.client.ChatClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import org.z23.agentwork.info.Logic;
import org.z23.agentwork.work.Agent1;
import org.z23.agentwork.work.Agent2;
import org.z23.agentwork.work.Agent3;


@Service
public class AgentService {

    private final ChatClient chatClient;
    private final Agent1 agent1;
    private final Agent2 agent2;
    private final Agent3 agent3;

    public AgentService(ChatClient.Builder chatClientBuilder, Agent1 agent1, Agent2 agent2, Agent3 agent3) {
        this.chatClient = chatClientBuilder.build();
        this.agent1 = agent1;
        this.agent2 = agent2;
        this.agent3 = agent3;
    }

    public String begin(String message,Logic logic) {

        switch (logic){
            case AND:
                System.out.println("12 - 3");
                String weatherInfo = agent1.getWeatherInfo(message);
                String dressingAdvice = agent2.getDressingAdvice(weatherInfo);

                if (weatherInfo != null && dressingAdvice != null){
                agent3.answer(weatherInfo,dressingAdvice);
                }
                break;
            case OR:
                System.out.println("(1 / 2) - 3");
                String weatherInfo1 = agent1.getWeatherInfo(message);
                String dressingAdvice1 = agent2.getDressingAdvice(weatherInfo1);

                if (weatherInfo1 != null || dressingAdvice1 != null){
                    agent3.answer(weatherInfo1,dressingAdvice1);
                }
                break;
            case NOT:
                System.out.println("(12) not - 3");
                String weatherInfo2 = agent1.getWeatherInfo(message);
                String dressingAdvice2 = agent2.getDressingAdvice(weatherInfo2);

                if (weatherInfo2 == null && dressingAdvice2 == null){
                        agent3.chat();
                    }
                break;

        }

        return null;
    }



/*
    public AgentService(ChatClient.Builder chatClientBuilder, ToolCallbackProvider tools) {
        String systemPrompt = """
                你作为穿衣助手Agent，请严格按以下步骤为用户推荐穿衣搭配：
                ### 步骤1：获取当前日期
                当前日期为{currentDate}。
                
                ### 步骤2：校验用户输入
                如果用户输入不包含城市名则提示用户'请输入城市名', 如果用户输入不包含日期则提示用户'请指定日期'。
                
                ### 步骤3：根据城市名和日期获取天气信息
                调用MCP Server工具'根据城市名获取天气信息'获取天气信息，参数：城市名cityName、日期date(yyyy-mm-dd格式)从用户输入中提取。等待mcp工具调用结果返回后再进行下一步操作。
                
                ### 步骤4：检查是否成功获取天气信息
                此时不要返回给用户任何结果，因为还需要进行下一个步骤
                
                ### 步骤5：根据天气信息获取穿衣建议
                调用MCP Server工具'根据天气信息获取穿衣建议'获取穿衣建议，参数：weatherInfo，从上一步获取的天气信息的输出结果赋值weatherInfo。
                
                ### 步骤6：返回建议
                这是最后一步，整理语言后输出穿衣建议，结束对话。
                """;
        String currentDateStr = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
        systemPrompt = systemPrompt.replace("{currentDate}", currentDateStr);
        this.chatClient = chatClientBuilder.defaultSystem(systemPrompt).defaultToolCallbacks(tools).build();
    }

    public String getDressingAdvice(String userInput) {
        System.out.println("调用模型生成");
        return chatClient.prompt().user(userInput).call().content();
    }

*/

}